import type { EntityDto } from '../../type';

// 流程定义
export interface WorkflowDefinition extends EntityDto<string> {
  // 标题
  title: string;
  // 版本
  version: number;
  // 描述
  description: string;
  // 图标
  icon: string;
  // 图标颜色
  color: string;
  // 分组
  group: string;
  // 输入条件
  inputs: Array<Array<Array<WorkflowInput>>>;
  // 流程节点
  nodes: Array<FlowNode>;
}

// 流程定义输入
export interface WorkflowInput extends EntityDto<string> {
  /*
   * 名称类似:key,id之类的设计的时候需要用户去填写
   * 以便对应业务数据的某个字段名称 比如需要设计某个订单交易金额
   * 则时候就配置为 OrderAmount 主要是为后续流程匹配作为条件选择
   * 比如 订单金额大于100的需要走什么流程 小于100的时候需要走什么流程
   * 该字段默认为""双引号的空 某些情况下可能不需要填写
   * 比如病假流程这个表单需要填写的可能是图片选择器  该地方上传的是请病假的医院证明截图之类的
   */
  name: string;
  // 标签显示名称
  label: string;
  // 类型
  type: WorkFormComponentsType;
  // 值
  value?: string | string[];
  // 复合属性选项
  items?: Array<WorkFormComponentsItems>;
  // 样式
  styles?: Array<WorkFormComponentsStyle>;
  // 规则
  rules?: Array<string>;
  // 最大值
  maxLength?: number;
  // 最小值
  minLength?: number;
}

// 流程节点
export interface FlowNode extends EntityDto<string> {
  // key
  key: string;
  // 标题
  title: string;
  // 图标
  icon: string;
  // 类型
  type: 'default' | 'success' | 'warning' | 'info' | 'text' | 'primary' | 'danger';
  // 分组
  group: string;
  // 位置
  position: [number, number];
  // 结束选项
  endpointOptions: Array<any>;
  // 步骤内容
  stepBody: any;
  // 上一步节点
  parentNodes: Array<string>;
  // 下一步节点
  nextNodes: Array<ConditionFlowNode>;
}

// 条件节点
export interface ConditionFlowNode extends EntityDto<string> {
  // 条件名称
  label: string;
  // 下一步ID
  nodeId: string;
  // 条件数组
  conditions: Array<Condition>;
}

// 条件
export interface Condition {
  // 字段Id
  field: string;
  // 操作符号
  operator: string;
  // 值
  value: string;
}

//工作流表单设计器支持的表单类型
export type WorkFormComponentsType =
  | 'text' // 文本
  | 'textarea' // 多行文本
  | 'checkbox' // 复选框
  | 'radio' // 单选框
  | 'paragraph' // 文本
  | 'select' // 下拉框
  | 'datepicker' // 日期选择器
  | 'daterangepicker' // 日期范围选择器
  | 'rate' // 评分
  | 'switch' // 开关
  | 'money' // 金额
  | 'number' // 数字
  | 'uploadImages'; // 图片上传
/**
 * 工作单元表单设计器样式数据结构
 *
 * @interface WorkFormComponentsStyle
 * **示例数据结构:**
 * ```
 * {
 *   name: "width",
 *   value: "100%",
 * }
 * ```
 */
export interface WorkFormComponentsStyle {
  // 名称
  name: string;
  // 对应的值
  value: string;
}

// 工作流表单设计器选项值 (注:只有为下拉框或单项复选等复合表单元素时才需要)
export interface WorkFormComponentsItems {
  // 选项的标签显示
  label: string;
  // 选项的值
  value: string;
}

// 工作流表单校验规则
export interface WorkFormComponentsRules {
  name: string;
  label: string;
  value: WorkFormComponentsRulesValue;
}

// 工作流表单校验规值
export interface WorkFormComponentsRulesValue {
  // 是否必填写
  required?: boolean;
  // 错误提示
  message: string;
  // 验证数据类型
  type?: WorkFormComponentsRulesValueType;
  // 正则表达式
  pattern?: RegExp;
}

// 验证数据类型
export type WorkFormComponentsRulesValueType = 'email' | 'phone' | 'string';
/*
 nodes: 数据格式
 [
    {
        "Key": "start_1713506679461bft7osk6smm",
        "Title": "流程开始",
        "Position": [
            450,
            24
        ],
        "Type": "success",
        "StepBody": {
            "Name": null,
            "Inputs": {}
        },
        "ParentNodes": [],
        "NextNodes": [
            {
                "Label": "直接审核",
                "NodeId": "step_1713506688366n77iub5tuch",
                "Conditions": []
            }
        ]
    },
    {
        "Key": "step_1713506688366n77iub5tuch",
        "Title": "admin审核",
        "Position": [
            446,
            186
        ],
        "Type": "primary",
        "StepBody": {
            "Name": "FixedUserAudit",
            "Inputs": {
                "UserId": {
                    "Name": "UserId",
                    "Value": 1
                }
            }
        },
        "ParentNodes": [
            "start_1713506679461bft7osk6smm"
        ],
        "NextNodes": [
            {
                "Label": "金额大于20的",
                "NodeId": "step_1713506734869tef910cg98",
                "Conditions": [
                    {
                        "Field": "Amount",
                        "Operator": ">",
                        "Value": "20"
                    }
                ]
            },
            {
                "Label": "其他金额",
                "NodeId": "step_17135067343178qo4re7mmvt",
                "Conditions": [
                    {
                        "Field": "Amount",
                        "Operator": "<=",
                        "Value": "20"
                    }
                ]
            }
        ]
    },
    {
        "Key": "step_17135067343178qo4re7mmvt",
        "Title": "总经理",
        "Position": [
            610,
            315
        ],
        "Type": "primary",
        "StepBody": {
            "Name": "FixedRoleAudit",
            "Inputs": {
                "RoleName": {
                    "Name": "RoleName",
                    "Value": "Admin"
                }
            }
        },
        "ParentNodes": [
            "step_1713506688366n77iub5tuch"
        ],
        "NextNodes": [
            {
                "Label": "",
                "NodeId": "end_1713506799040i34hoyxhvci",
                "Conditions": []
            }
        ]
    },
    {
        "Key": "step_1713506734869tef910cg98",
        "Title": "上级主管",
        "Position": [
            276,
            318
        ],
        "Type": "primary",
        "StepBody": {
            "Name": "FixedUserAudit",
            "Inputs": {
                "UserId": {
                    "Name": "UserId",
                    "Value": 1
                }
            }
        },
        "ParentNodes": [
            "step_1713506688366n77iub5tuch"
        ],
        "NextNodes": [
            {
                "Label": "",
                "NodeId": "end_1713506799040i34hoyxhvci",
                "Conditions": []
            }
        ]
    },
    {
        "Key": "end_1713506799040i34hoyxhvci",
        "Title": "结束",
        "Position": [
            456,
            394
        ],
        "Type": "error",
        "StepBody": {
            "Name": null,
            "Inputs": {}
        },
        "ParentNodes": [
            "step_1713506734869tef910cg98",
            "step_17135067343178qo4re7mmvt"
        ],
        "NextNodes": []
    }
]
*/

/* inputs: 数据格式
[
    [
        [
            {
                "Id": "1713506585130d5firgplajk",
                "Name": "Content",
                "Label": "单据内容",
                "Type": "text",
                "Value": null,
                "Styles": [],
                "MaxLength": null,
                "MinLength": null,
                "Items": null,
                "Rules": []
            }
        ]
    ],
    [
        [
            {
                "Id": "1713506613792hfxfn5rmwfu",
                "Name": "Amount",
                "Label": "金额",
                "Type": "number",
                "Value": null,
                "Styles": [
                    {
                        "name": "width",
                        "value": "100%"
                    }
                ],
                "MaxLength": 100,
                "MinLength": 1,
                "Items": null,
                "Rules": [
                    "required"
                ]
            }
        ]
    ]
]
*/
